package com.设计模式;

//类的适配器模式
//对象的适配器模式
//接口的适配器模式
public class 适配器模式
{
    public static void main(String[] args)
    {
        Targetable targetable = new Adapter();
        targetable.method1();
        targetable.method2();
    }
}

//类的适配器模式
class Source
{
    public void method1()
    {
        System.out.println("this is a original method!");
    }
}

interface Targetable
{
    void method1();

    void method2();
}

class Adapter extends Source implements Targetable
{

    @Override
    public void method2()
    {
        System.out.println("this is a targetable method!");
    }
}

//对象的适配器模式
class Wrapper implements Targetable
{
    private Source source;

    public Wrapper(Source source)
    {
        this.source = source;
    }

    @Override
    public void method1()
    {
        source.method1();
    }
    @Override
    public void method2()
    {
        System.out.println("this is a target method!");
    }

    public static void main(String[] args)
    {
        Source source = new Source();
        Targetable target = new Wrapper(source);
        target.method1();
        target.method2();
    }
}

//接口的适配器模式
/*
    接口的适配器是这样的：有时我们写的一个接口中有多个抽象方法，当我们写该接口的实现类时，必须实现该接
    口的所有方法，这明显有时比较浪费，因为并不是所有的方法都是我们需要的，有时只需要某一些，此处为了解决这个
    问题，我们引入了接口的适配器模式，借助于一个抽象类，该抽象类实现了该接口，实现了所有的方法，而我们不和原
    始的接口打交道，只和该抽象类取得联系，所以我们写一个类，继承该抽象类，重写我们需要的方法就行。
* */